﻿/**********************************************************************
    @file   TreeWidget.h
    @brief  树界面
    @author BaGuijun (baguijun@163.com)
    @date   2024-09-04
 *********************************************************************/
#ifndef _CFDPostTreeWidget_H
#define _CFDPostTreeWidget_H

#include "CFDPostUIComponents_global.h"
#include <QTreeWidget>

namespace Interface {
class FITKCFDPost3DManager;
class PostGraphObjectManager;
}

namespace GUI {
/**
    @brief  树界面
    @author BaGuijun (baguijun@163.com)
    @date   2024-09-04
*/
class CFDPOSTUICOMPONENTS_EXPORT CFDPostTreeWidget : public QTreeWidget {
    Q_OBJECT;
  public:
    /**
        @brief    构造函数
        @param[i] parent  父对象
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-04
    */
    CFDPostTreeWidget(QWidget* parent = nullptr);
    /**
        @brief    析构函数
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-04
    */
    ~CFDPostTreeWidget();
    /**
        @brief    更新树
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-06
    */
    void updateTree();
    /**
        @brief    获取当前数据对象id
        @return   int            id
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-14
    */
    int getCurrentDataID();
  private slots:
    ;
    /**
        @brief    树节点点击事件
        @param[i] item    节点对象
        @param[i] row     索引
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-04
    */
    virtual void slotItemClecked(QTreeWidgetItem* item, int index);
    /**
        @brief    鼠标右键点击事件
        @param[i] point
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-07
    */
    virtual void onModelCustomContextMenu(QPoint point);
    /**
        @brief    按钮点击事件
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-07
    */
    void slotAcitonClicked();
  private:
    /**
        @brief    添加action
        @param[i] menu           Qmenu对象
        @param[i] actions        action对象
        @param[i] objectName     action名称
        @param[i] isEnable       action是否可用
        @author   BaGuijun (baguijun@163.com)
        @date     2024-09-07
    */
    void addMenuActions(QMenu& menu, QString actions, QString objectName, bool isEnable = true);

    void setCurrentDataID(int dataID);
protected:
    /**
        @brief  根节点
        @author BaGuijun (baguijun@163.com)
        @date   2024-09-04
    */
    QTreeWidgetItem* _rootItem = nullptr;
  private:
    /**
        @brief  当前节点数据对象id
        @author BaGuijun (baguijun@163.com)
        @date   2024-09-09
    */
    int _currentObjID = -1;
    /**
        @brief  后处理数据管理器
        @author BaGuijun (baguijun@163.com)
        @date   2024-09-06
    */
    Interface::FITKCFDPost3DManager* _postDataManager = nullptr;
    /**
        @brief  后处理可视化数据管理
        @author BaGuijun (baguijun@163.com)
        @date   2024-10-08
    */
    Interface::PostGraphObjectManager* _postGraphManager = nullptr;
    /**
        @brief  树节点存储
        @author BaGuijun (baguijun@163.com)
        @date   2024-10-08
    */
    QHash<int, QTreeWidgetItem*> _itemHash = {};
};
}

#endif
